package com.study.design.model.createPattern.singleton;

import java.util.concurrent.CountDownLatch;

/**
* @Name: EffectiveTest
* @Description: 五种单例创建方式效率比较
* @Author: 李超	lc_jack@foxmail.com
* @CreateDate: 2017-2-9 下午8:49:46 
* @Version: V1.0
 */
public class EffectiveTest {
	
	public static void main(String[] args) throws InterruptedException {
		long start = System.currentTimeMillis() ;
		//设置并发线程数
		int threadNum = 10 ;
		//创建线程同步辅助类对象，并指定并发线程计数器
		/**
		 * 说明：
		 * 	1、每执行完一个线程，线程同步辅助类对象将调用countDown()方法，将计数器的值减1；
		 * 	2、每执行完一个线程，线程同步辅助类对象将调用await()方法，在计数器减到零之前，该线程将一直被阻塞；
		 * 	3、当所有线程执行完毕之后，计数器的值减为0，释放所有阻塞线程，继续向下执行；
		 */
		final CountDownLatch countDownLatch = new CountDownLatch(threadNum) ;
		for (int i = 0; i < threadNum; i++) {
			new Thread(new Runnable() {
				@Override
				public void run() {
					for (int i = 0; i < 100000; i++) {
						Singleton01 instance = Singleton01.getInstance() ;
					}
					countDownLatch.countDown() ; 
				}
			}).start();
		}
		countDownLatch.await() ; 
		long end = System.currentTimeMillis() ;
		System.out.println((end - start) + "ms");
	}

}
